#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//#include <cstdio>
//#include <cstring>

//using namespace std;
//
//const int N = 510, M = 10010;
//int dist[N], backup[N];
//int n, m, k;
//struct
//{
//    int a, b, w;
//}eage[M];
//int bellman_ford()
//{
//    memset(dist, 0x3f, sizeof dist);
//    dist[1] = 0;
//    for (int i = 0; i < k; i++)
//    {
//        memcpy(backup, dist, sizeof dist);
//        for (int j = 0; j < m; j++)
//        {
//            int a = eage[j].a, b = eage[j].b, w = eage[j].w;
//            dist[b] = min(dist[b], backup[a] + w);
//        }
//    }
//    if (dist[n] > 0x3f3f3f3f - 5e6) return -1;
//    else return dist[n];
//}
//int main()
//{
//    scanf("%d%d%d", &n, &m, &k);
//    for (int i = 0; i < m; i++)
//    {
//        int a, b, w;
//        scanf("%d%d%d", &a, &b, &w);
//        eage[i] = { a, b, w };
//    }
//    int t = bellman_ford();
//    if (t == -1) puts("impossible");
//    else printf("%d", t);
//    return 0;
//}
//#include <iostream>
//#include <cstring>
//#include <cstdio>
//
//using namespace std;
//
//const int N = 510;
//int g[N][N], dist[N];
//bool st[N];
//int n, m;
//int dijkstra()
//{
//    memset(dist, 0x3f, sizeof dist);
//    dist[1] = 0;
//    for (int i = 0; i < n - 1; i++)
//    {
//        int t = -1;
//        for (int j = 1; j <= n; j++)
//            if (!st[j] && (t == -1 || dist[j] < dist[t]))
//                t = j;
//        st[t] = true;
//        for (int j = 1; j <= n; j++)
//            dist[j] = min(dist[j], dist[t] + g[t][j]);
//    }
//    if (dist[n] == 0x3f3f3f3f) return -1;
//    else return dist[n];
//}
//int main()
//{
//    scanf("%d%d", &n, &m);
//
//    memset(g, 0x3f, sizeof g);
//
//    while (m--)
//    {
//        int x, y, z;
//        g[x][y] = min(g[x][y], z);
//    }
//    printf("%d", dijkstra());
//    return 0;
//}
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int N = 1e5 + 10;
int e[N], ne[N], h[N], idx, d[N];
int n, m;
int q[N], tt, hh;
void add(int x, int y)
{
    e[idx] = y, ne[idx] = h[x], h[x] = idx++;
}
bool top()
{
    tt = -1, hh = 0;
    for (int i = 1; i <= n; i++)
        if (!d[i]) q[++tt] = i;
    while (hh <= tt)
    {
        int t = q[hh++];
        for (int i = h[t]; i != -1; i = ne[i])
        {
            int j = e[i];
            d[j]--;
            if (!d[j])
                q[++tt] = j;
        }
    }
    if (hh == n) return true;
    else return false;
}
int main()
{
    scanf("%d%d", &n, &m);
    while (m--)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        add(x, y);
        d[y] ++;
    }
    if (top())
        for (int i = 0; i < n; i++)
            printf("%d ", q[i]);
    else puts("-1");
    return 0;
}